---! 更新数据参照时间
local refer_time = os.time({ year=2019, month=7, day=4, hour=9, min=0, sec=0, })

---! 获取下次更新时间
local function get_next_update_time(ti)
    local timetable = os.date("*t", ti)
    timetable.day = timetable.day + 1
    timetable.hour = 0
    timetable.min = 0
    timetable.sec = 0
    return os.time(timetable) - refer_time
end

---! 是否可以更新数据
local function can_update_data(player)
    ---! 获取当前时间
    local now_time = os.time()

    local next_update_time = player:query("basic", "nextUpdateTime") or 0
    if next_update_time <= 0 then
        -- 初始下次更新时间，此次不做更新处理
        next_update_time = player:set("basic", "nextUpdateTime", get_next_update_time(now_time))
    end

    if next_update_time + refer_time > now_time then
        -- 更新时间尚未到达，此次不做更新处理
        return false
    end

    -- 设置下次更新时间
    player:set("basic", "nextUpdateTime", get_next_update_time(now_time))
    return true
end

-------------------------------------------------------------------------------
---! 对外接口
-------------------------------------------------------------------------------
local M = {}

---! 更新玩家数据
function M:update_data()
    if not can_update_data(self) then
        return
    end

    ---! 处理每日需要重置的数据
    ----todo:
end

---! 获取角色创建时间
function M:get_create_time()
    return self:query("basic", "createTime")
end

---! 记录角色创建时间
function M:set_create_time()
    self:set("basic", "createTime", os.time())
end

---! 获取角色在线时长
function M:get_online_time()
    ---! 获取上次断线时的在线时长
    local last_online_time = self:query_temp("last_online_time") or 0

    ---! 获取当前角色游戏在线时长
    local online_time = os.time() - (self:query_temp("start_online_time") or 0)

    ---! 返回当前角色在线总时长
    return last_online_time + online_time
end

F_CHAR_UPDATE = M
